package ai.people.platform.system.service;

import ai.people.netmon.framework.domain.system.entity.NmSystemUser;
import ai.people.netmon.framework.domain.system.entity.NmSystemUserInfo;
import ai.people.netmon.framework.domain.system.request.SystemUserRequest;
import ai.people.netmon.framework.domain.system.request.UpdatePasswordParam;
import ai.people.netmon.framework.domain.system.vo.NmSystemLoginUserVO;
import ai.people.netmon.framework.domain.system.vo.NmSystemUserSimpleVO;
import ai.people.netmon.framework.domain.system.vo.NmSystemUserVO;
import ai.people.netmon.framework.model.response.PageResponse;

import java.util.List;

/**
 * 系统用户服务
 *
 * @author yuanqinglong
 * @date 2022/3/4 15:50
 */
public interface SystemUserService {


    /**
     * 通过账号查询用户
     *
     * @param account 账户
     * @return {@link NmSystemUserVO}
     */
    NmSystemUserVO getUserByAccount(String account);


    /**
     * 通过帐户获取longin用户信息
     *
     * @param account 账户
     * @return {@link NmSystemLoginUserVO}
     */
    NmSystemLoginUserVO getLonginUserByAccount(String account);


    /**
     * 通过id查询用户
     *
     * @param userId 用户id
     * @return {@link NmSystemUser}
     */
    NmSystemUserVO getUserById(Long userId);


    /**
     * 通过账号更新密码
     *
     * @param updatePasswordParam 密码参数
     * @return {@link NmSystemUserVO}
     */
    NmSystemUserVO updatePasswordByAccount(UpdatePasswordParam updatePasswordParam);


    /**
     * 用户列表
     *
     * @param systemUserRequest 系统用户请求
     * @return {@link PageResponse}<{@link NmSystemUserVO}>
     */
    PageResponse<NmSystemUserVO> listUsers(SystemUserRequest systemUserRequest);


    /**
     * 非管理员用户列表
     *
     * @return {@link List}<{@link NmSystemUserSimpleVO}>
     */
    List<NmSystemUserSimpleVO> listNonAdminUsers();

    /**
     * 添加系统用户
     *
     * @param nmSystemUser     系统用户
     * @param nmSystemUserInfo 系统用户信息
     */
    void addSystemUser(NmSystemUser nmSystemUser, NmSystemUserInfo nmSystemUserInfo);


    /**
     * 更新用户
     *
     * @param nmSystemUser 系统用户
     * @param nmSystemUserInfo 系统用户信息
     */
    void updateUser(NmSystemUser nmSystemUser, NmSystemUserInfo nmSystemUserInfo);


    /**
     * 删除用户
     *
     * @param userId 用户id
     */
    void deleteUser(Long userId);


    /**
     * 检查用户是否存在
     *
     * @param userId 用户id
     */
    void checkUserExists(Long userId);


    /**
     * 更新最后登录时间
     *
     * @param userId 用户id
     */
    void updateLastLoginTime(Long userId);



}
